﻿using System;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities.Auditing;

namespace Puppy.Scheduler.Applications
{
    /// <summary>
    /// 应用实体
    /// </summary>
    public class ApplicationEntity : FullAuditedEntity<long>
    {
        /// <summary>
        /// 应用名称，不可重复
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 描述
        /// </summary>
        public string Description { get; set; }

        /// <summary>
        /// 内存使用率 0-100，默认为 90
        /// <para>表示近5分钟进程内存平均使用率不能大于该阈值，否则判断客户端机器繁忙。</para>
        /// </summary>
        [Range(0, 100)]
        public int MemoryUsage { get; set; } = 90;

        /// <summary>
        /// 磁盘使用率 0-100，默认为 95
        /// <para>表示磁盘使用率不能大于该值，否则判断客户端机器不健康，状态繁忙。</para>
        /// </summary>
        [Range(0, 100)]
        public int DiskUsage { get; set; } = 95;

        /// <summary>
        /// 是否触发繁忙机器，默认为 true
        /// </summary>
        public bool IsTriggerBusyMachine { get; set; } = true;

        /// <summary>
        /// 任务最大数量，默认1000
        /// <para>一个应用最多支持的Job数量</para>
        /// </summary>
        public int MaxTask { get; set; } = 1000;

        /// <summary>
        /// 已有任务数
        /// </summary>
        public int CurrentTaskNum { get; set; }

        /// <summary>
        /// 实例总数
        /// </summary>
        public int InstanceNum { get; set; }
    }

    // todo: 应用报警配置
}
